package cn.hsw.platform.service;

import cn.hsw.platform.core.base.BaseService;
import cn.hsw.platform.model.RoleModel;
import cn.hsw.platform.vo.RolePermissionVO;
import cn.hsw.platform.vo.RoleVO;

import java.util.List;


/**
 * 角色service
 * @author 李子木
 * @date 2020-11-10
 */
public interface RoleService extends BaseService<RoleModel,Long> {

    /**
     * 通过角色编码查询角色
     * @param code 角色编码
     * @return  角色
     */
    RoleModel findByCode(String code);

    /**
     * 修改
     * @param roleModel 旧内容
     * @param roleVO 新内容
     */
    void edit(RoleModel roleModel, RoleVO roleVO);

    /**
     * 角色新增
     * @param roleModel 新增内容
     */
    void add(RoleModel roleModel);

    /**
     * 角色授权
     * @param params 参数
     */
    void authorization(RolePermissionVO params);

    List<RoleModel> findByUserPid(Long userPid);

    /**
     * 用户绑定角色
     * @param userPid 用户主键
     * @param rolePid 角色主键
     * @return 成功失败标识
     */
    boolean bind(Long userPid,Long rolePid);

    /**
     * 角色接触绑定
     * @param pid 用户ID
     */
    void unBind(Long pid);

    /**
     * 判断角色下是否含有用户
     * @param pid 角色ID
     * @return true 有 false 没有
     */
    boolean validateRoleHaveUser(Long pid);

    /**
     * 根据角色ID 查询用户的权限ID
     * @param rolePid 角色ID
     * @return RolePermissionVO
     */
    RolePermissionVO auth(Long rolePid);

    /**
     * 通过用户主键获取角色主键列表
     * @param userPid 用户主键
     * @return -
     */
    List<Long> findRolePidByUserPid(Long userPid);

    /**
     * 通过角色主键，获取权限code列表
     * @param rolePid 角色主键
     * @return -
     */
    List<String> findPermissionCodeByRolePid(Long rolePid);
}
